package co.edu.udea.herbario.logneg;

import java.util.Date;
import java.util.List;
import co.edu.udea.herbario.dto.Ejemplar;
import co.edu.udea.herbario.excepcion.Excepcion;
import co.edu.udea.herbario.excepcion.ExcepcionLogicaNegocio;

/**
 * Clase tipo interface encargada de la declaracion de los metodos utilizados para la gestion de ejemplares 
 * 
 * @author Lorena Orozco, Alejandro Areiza, Marcela Colorado
 *
 */
public interface AdministracionEjemplares 
{

	/**
	 * Metodo que permite modificar todos o algunos de los datos pertenecientes a un ejemplar en la tabla
	 * Ejemplar
	 * 
	 * @param cod es el identificador del ejemplar dentro del sistema
	 * @param especie hace referencia al nombre de la especie a la que pertenece el ejemplar
	 * @param municipio corresponde al municipio donde fue hallado el ejemplar
	 * @param nombreAutor indica el nombre de quien define la especie
	 * @param fechaDet es la fecha en la que se define la taxonomia del ejemplar
	 * @param nombreDeterminador hace referencia al nombre de quien define la taxonomia del ejemplar
	 * @param nomColectorPpal es el nombre de la persona que hallo el ejemplar
	 * @param numColector indica el consecutivo asignado al ejemplar por la persona que lo hallo
	 * @param fechaColeccion es la fecha en la que fue recolectado el ejemplar
	 * @param nomComun hace referencia a la denominacion dada popularmente al ejemplar
	 * @param nomCien es la denominacion resultante para el ejemplar luego de combinar genero + especie
	 * @param elevacionMin es la altura minima en donde se colecto el ejemplar
	 * @param elevacionMax es la altura maxima en donde se colecto el ejemplar
	 * @param gradsLat es el componente en grados de la localizacion del ejemplar en direccion Norte - Sur
	 * @param minLat es el componente en minutos de la localizacion del ejemplar en direccion Norte - Sur
	 * @param segLat es el componente en segundos de la localizacion del ejemplar en direccion Norte - Sur
	 * @param gradsLon es el componente en grados de la localizacion del ejemplar en direccion Este - Oeste
	 * @param minLon es el componente en minutos de la localizacion del ejemplar en direccion Este - Oeste
	 * @param segLon es el componente en segundos de la localizacion del ejemplar en direccion Este - Oeste
	 * @param publicarCoor indica si las coordenadas de la ubicacion del ejemplar pueden ser publicadas o no
	 * @param colFlor corresponde al color de la flor del ejemplar
	 * @param colFruto hace referencia al color del fruto del ejemplar
	 * @param formaIngreso indica si el ejemplar fue donado o colectado por el herbario
	 * @param nomInstitucion es el nombre de la institucion que dono el ejemplar
	 * @param disponible indica la disponibilidad del ejemplar en el herbario
	 * 
	 * @throws Excepcion
	 * @throws ExcepcionLogicaNegocio
	 */
	public void modificarEjemplar(int cod, String especie, String municipio, String nombreAutor, Date fechaDet, String nombreDeterminador, 
			String nomColectorPpal,	int numColeccion, Date fechaColeccion, String nomComun, String nomCien, int elevacionMin, 
			int elevacionMax, int gradsLat, int minLat, int segLat,	int gradsLon, int minLon, int segLon, boolean publicarCoor, String colFlor, 
			String colFruto, String formaIngreso, String nomInstitucion, boolean disponible) throws Excepcion, ExcepcionLogicaNegocio;
	
	/**
	 * Metodo que permite registrar un ejemplar en la tabla Ejemplar
	 * 
	 * @param especie hace referencia al nombre de la especie a la que pertenece el ejemplar
	 * @param municipio municipio corresponde al municipio donde fue hallado el ejemplar
	 * @param admin corresponde al nombre del administrador que desea registrar el ejemplar en la tabla Ejemplar
	 * @param nomAutor indica el nombre de quien define la especie
	 * @param fechaDet es la fecha en la que se define la taxonomia del ejemplar
	 * @param nombreDeterminador hace referencia al nombre de quien define la taxonomia del ejemplar
	 * @param nomColectorPpal es el nombre de la persona que hallo el ejemplar
	 * @param numColector indica el consecutivo asignado al ejemplar por la persona que lo hallo
	 * @param fechaColeccion es la fecha en la que fue recolectado el ejemplar
	 * @param nomComun hace referencia a la denominacion dada popularmente al ejemplar
	 * @param nomCien es la denominacion resultante para el ejemplar luego de combinar genero + especie
	 * @param elevacionMin es la altura minima en donde se colecto el ejemplar
	 * @param elevacionMax es la altura maxima en donde se colecto el ejemplar
	 * @param gradsLat es el componente en grados de la localizacion del ejemplar en direccion Norte - Sur
	 * @param minLat es el componente en minutos de la localizacion del ejemplar en direccion Norte - Sur
	 * @param segLat es el componente en segundos de la localizacion del ejemplar en direccion Norte - Sur
	 * @param gradsLon es el componente en grados de la localizacion del ejemplar en direccion Este - Oeste
	 * @param minLon es el componente en minutos de la localizacion del ejemplar en direccion Este - Oeste
	 * @param segLon es el componente en segundos de la localizacion del ejemplar en direccion Este - Oeste
	 * @param publicarCoor indica si las coordenadas de la ubicacion del ejemplar pueden ser publicadas o no
	 * @param colFlor corresponde al color de la flor del ejemplar
	 * @param colFruto hace referencia al color del fruto del ejemplar
	 * @param formaIngreso indica si el ejemplar fue donado o colectado por el herbario
	 * @param nomInstitucion es el nombre de la institucion que dono el ejemplar
	 * @param disponible indica la disponibilidad del ejemplar en el herbario
	 * 
	 * @throws Excepcion
	 * @throws ExcepcionLogicaNegocio
	 */
	public void registrarEjemplar(String especie, String municipio, String admin, String nomAutor, Date fechaDet, String nombreDeterminador,
			String nomColectorPpal,	int numColeccion, Date fechaColeccion, String nomComun, String nomCien, int elevacionMin, 
			int elevacionMax, int gradsLat, int minLat, int segLat,	int gradsLon, int minLon, int segLon, boolean publicarCoor, String colFlor, 
			String colFruto, String formaIngreso, String nomInstitucion) throws Excepcion, ExcepcionLogicaNegocio;
	
	/**
	 * Metodo que modifica el estado (activo o inactivo) del ejemplar referenciado con el codigo indicado
	 * como parametro
	 * 
	 * @param cod es el consecutivo con el cual se identifica el ejemplar dentro del sistema
	 * 
	 * @throws Excepcion
	 * @throws ExcepcionLogicaNegocio
	 */
	public void eliminarEjemplar(int cod) throws Excepcion, ExcepcionLogicaNegocio;
}
